home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Disc to the Future 2
/
Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin
/
MAC
/
THINKC
/
TCL1
/
__MANDEL
/
MANDELBR
/
CMANDELD.C
< prev
next >
Wrap
Text File
|
1992-03-28
|
3KB
|
88 lines
// CMandelDividePhase.c
#include "CMandelCheckPhase.h"
#include "CMandelDividePhase.h"
#include "CMandelHLinePhase.h"
#include "CMandelVLinePhase.h"
#include "CMandelRectPhase.h"
void
CMandelDividePhase::IMandelDividePhase(CMandelDoc *theDoc,
CMandelPhase *theNextPhase, Rect theRect)
{
CMandelPhase::IMandelPhase(theDoc, theNextPhase);
itsRect = theRect;
}
CMandelPhase *
CMandelDividePhase::Perform(void)
{
Point aCenter;
aCenter.v = (itsRect.bottom - itsRect.top) / 2;
aCenter.h = (itsRect.right - itsRect.left) / 2;
if (aCenter.v && aCenter.h)
{
if (aCenter.v < 4 || aCenter.h < 4)
{
CMandelRectPhase * aRectPhase;
aRectPhase = new CMandelRectPhase;
aRectPhase->IMandelRectPhase(itsDoc, itsNextPhase,
itsRect.left + 1, itsRect.top + 1,
itsRect.right - (itsRect.left + 2),
itsRect.bottom - (itsRect.top + 2));
itsNextPhase = aRectPhase;
}
else
{
CMandelCheckPhase * aCheckPhase;
CMandelLinePhase * aLinePhase;
Rect aRectMatrix[4];
aCenter.v += itsRect.top;
aCenter.h += itsRect.left;
aRectMatrix[0].top = aRectMatrix[1].top = itsRect.top;
aRectMatrix[0].left = aRectMatrix[2].left = itsRect.left;
aRectMatrix[2].bottom = aRectMatrix[3].bottom = itsRect.bottom;
aRectMatrix[1].right = aRectMatrix[3].right = itsRect.right;
aRectMatrix[0].bottom = aRectMatrix[1].bottom =
aRectMatrix[2].top = aRectMatrix[3].top = aCenter.v;
aRectMatrix[0].right = aRectMatrix[2].right =
aRectMatrix[1].left = aRectMatrix[3].left = aCenter.h;
aCheckPhase = new CMandelCheckPhase;
aCheckPhase->IMandelCheckPhase(itsDoc, itsNextPhase, aRectMatrix[3]);
itsNextPhase = aCheckPhase;
aCheckPhase = new CMandelCheckPhase;
aCheckPhase->IMandelCheckPhase(itsDoc, itsNextPhase, aRectMatrix[2]);
itsNextPhase = aCheckPhase;
aCheckPhase = new CMandelCheckPhase;
aCheckPhase->IMandelCheckPhase(itsDoc, itsNextPhase, aRectMatrix[1]);
itsNextPhase = aCheckPhase;
aCheckPhase = new CMandelCheckPhase;
aCheckPhase->IMandelCheckPhase(itsDoc, itsNextPhase, aRectMatrix[0]);
itsNextPhase = aCheckPhase;
aLinePhase = new CMandelHLinePhase;
aLinePhase->IMandelLinePhase(itsDoc, itsNextPhase,
itsRect.left + 1, aCenter.v, itsRect.right - (itsRect.left + 2));
itsNextPhase = aLinePhase;
aLinePhase = new CMandelVLinePhase;
aLinePhase->IMandelLinePhase(itsDoc, itsNextPhase,
aCenter.h, itsRect.top + 1, itsRect.bottom - (itsRect.top + 2));
itsNextPhase = aLinePhase;
}
}
return itsNextPhase;
}